package com.seaengine.util
{
	import flash.events.NetStatusEvent;
	import flash.net.SharedObject;
	
	/**
	 * 共享对象(由于远程不太经常用到所以此类只提供getLocal其它需要自己扩展，使用此类优点在于把多个SharedObject对象放在一个类处理，方便维护)
	 * @author 曹鹏
	 */	
	public class Cookie
	{
	
		//--------------------------------------------------------------------------
		//
		//  variable
		//
		//--------------------------------------------------------------------------
		
		public function Cookie()
		{
			
		}
	
		//--------------------------------------------------------------------------
		//
		//  property
		//
		//--------------------------------------------------------------------------
		private static var _sharedObject:SharedObject;

		/**
		 * 共享对象
		 */		
		public static function get sharedObject():SharedObject
		{
			return _sharedObject;
		}

		public static function set sharedObject(value:SharedObject):void
		{
			_sharedObject = value;
		}

		//--------------------------------------------------------------------------
		//
		//  static
		//
		//--------------------------------------------------------------------------
		/**
		 * 同名此方法目的就是为了让共享对象在这个类做统一处理
		 * @param name        对象的名称
		 * @param localPath  创建了共享对象的 SWF 文件的完整路径或部分路径，这将确定共享对象的本地存储位置。如果未指定此参数，则使用完整路径
		 * @param secure     确定对此共享对象的访问是否只限于通过 HTTPS 连接传递的 SWF 文件
		 * @return           SharedObject
		 */		
		public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject
		{
			if(name != "")
			{
				_sharedObject = SharedObject.getLocal(name,localPath,secure);
				_sharedObject.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
			}
			return _sharedObject;
		}
		
		/**
		 * 对于本地共享对象，清除所有数据并从磁盘删除共享对象
		 */		
		public static function clear():void
		{
			if(_sharedObject != null)
			{
				_sharedObject.clear();
			}
		}
		
		/**
		 * 存储信息到用户本地
		 * @param identifier 唯一标识，对应本地一个文件
		 * @param propertyName 属性名
		 * @param value 属性值
		 * @return 是否储存成功
		 * 
		 */
		public static function saveToLocal(identifier:String,propertyName:String,value:*):Boolean
		{
			try
			{
				var obj:SharedObject = getLocal(identifier);
				obj.data[propertyName] = value;
				obj.flush();
				
			}
			catch(e:Error)
			{
				trace(e.getStackTrace());
				return false;
			}
			
			return true;
		}
		//--------------------------------------------------------------------------
		//
		//  public
		//
		//--------------------------------------------------------------------------
		
		//--------------------------------------------------------------------------
		//
		//  private
		//
		//--------------------------------------------------------------------------
		
		//--------------------------------------------------------------------------
		//
		//  override
		//
		//--------------------------------------------------------------------------

		//--------------------------------------------------------------------------
		//
		//  event
		//
		//--------------------------------------------------------------------------
		private static function netStatusHandler(e:NetStatusEvent):void
		{
			clear();
		}
	}
}